package com.kamistoat.meimeichatserveraggrement.protocol.p2p;

import com.kamistoat.meimeichatserveraggrement.protocol.Command;
import com.kamistoat.meimeichatserveraggrement.protocol.Packet;

/**
 * 当ClientA试图和ClientB建立UDP打洞时，发送该请求给服务器，由服务器协助两者打洞。
 * 这里做了一次双向同步，保证最新UDP地址正确
 *
 * 最准确的双向同步应该是:
 * 1. A向服务器发送 UDP_EstablishP2PClient2Server，要求与B建立打洞。
 * 2. 服务器获取A最新UDP地址，携带该地址向B发送 TCP_EstablishP2PServer2Client 。
 * 3. B向A的UDP地址发送 UDP_AnswerP2PClient2Client，此时A可能收到也可能收不到。如果收到，则不再需要继续执行因为已经建立成功。
 * 4. 若收不到，此时一定保证建立B->A的NET映射。B向服务器发送 UDP_AnswerP2PClient2Server应答，告知B->A就绪。
 * 5. 服务器获取B最新UDP地址，携带该地址向A发送 TCP_EstablishP2PServer2Client。
 * 6. A向B的UDP地址发送 UDP_AnswerP2PClient2Client，此时B一定可以收到(除非B的UDP地址发生改变)，B向A发送 UDP_AnswerP2PClient2Client，告知A->B就绪。
 * 7. A开始直接向B的UDP地址发送消息
 */
public class UDP_EstablishP2PClient2Server extends Packet {
    /**
     * ClientA的userId
     */
    private String selfClientUserId;
    /**
     * ClientB的userId
     */
    private String targetClientUserId;

    public UDP_EstablishP2PClient2Server() {
    }

    public UDP_EstablishP2PClient2Server(String selfClientUserId, String targetClientUserId) {
        this.selfClientUserId = selfClientUserId;
        this.targetClientUserId = targetClientUserId;
    }

    public String getSelfClientUserId() {
        return selfClientUserId;
    }

    public void setSelfClientUserId(String selfClientUserId) {
        this.selfClientUserId = selfClientUserId;
    }

    public String getTargetClientUserId() {
        return targetClientUserId;
    }

    public void setTargetClientUserId(String targetClientUserId) {
        this.targetClientUserId = targetClientUserId;
    }

    /**
     * 获取协议指令
     *
     * @return 返回指令值
     */
    @Override
    public Byte getCommand() {
        return Command.UDP_EstablishP2PClient2Server;
    }
}
